package main
import (
    "fmt"
)

type People interface {
	Show()
}

type Student struct{}

func (stu *Student) Show() {

}

func live() People {
	var stu *Student

	fmt.Printf("stu=%v\n", stu)
	fmt.Printf("bNil=%v\n", stu == nil)
	return stu
}

func main() {

	//Go语言第一深坑 - interface 与 nil 的比较   https://studygolang.com/articles/10635
	//  在Go语言中，一个interface{}类型的变量包含了2个指针，一个指针指向值的类型(type)，另外一个指针指向实际的值(value)
	//  1、对于一个interface{}类型的nil变量来说，它的两个指针都是0，跟 nil 判断，返回 true
	//  2、把一个nil值赋值给interface{}，interface里 value为0 ，但 type 不为 0， 此时拿这个interface变量去 nil 比较 就会返回false

	itfTmp := live()
	fmt.Printf("itfTmp=%v\n", itfTmp)	
	fmt.Printf("bNil=%v\n", itfTmp == nil)

	if itfTmp == nil {
		fmt.Println("AAAAAAA")
	} else {
		fmt.Println("BBBBBBB")
	}

	var iTmp int
	fmt.Printf("iTmp=%v\n", iTmp)
}


 

	

 